package model;
import java.util.TimerTask;
import view.Main;

/**
 * Deze klasse defineert de taak die uitgevoerd wordt door de timer die aangeeft
 * dat de vijand moet bewegen.
 * @author Alvin & Roy
 */
public class BeweegVijand extends TimerTask{
    /** De vijand die door deze taak aangeroepen wordt */
    Vijand vijand;
    /** Het hoofdscherm */
    Main main;
    /** Bepaal of het de eerste uitvoering van de taak is */
    boolean eersteKeer;

    /**
     * Constructor
     * @param v De vijand die moet bewegen.
     * @param m De main
     */
    public BeweegVijand(Vijand v, Main m){
        //de constructor van Timer
        super();

        vijand = v;
        main = m;
        //eerste keer is true
        eersteKeer = true;
    }

    /**
     * De taak die wordt uitgevoerd
     */
    public void run(){
        //als de vijand mag bewegen
        if(vijand.magBewegen()){
            //als het de eerste keer is
            if(eersteKeer){
                //voeg zichzelf toe aan de lijst in Main
                main.addVijandThread(this);
                //zet eerste keer op false
                eersteKeer = false;
                //Beweeg de vijand
                vijand.move();
            }else{ //als het niet de eerste keer is
                //als er geen laatste pad is
                if(vijand.getLaatstePad() == null){
                    //als de vijand nog niet vast staat
                    if(!vijand.staatVast()){
                        //zet de vijand vast
                        vijand.zetVast();
                        //controleer of het spel gewonnen is
                        main.checkWinSpel();
                    }
                    //beweeg de vijand
                    vijand.move();
                //als het laatste pad korter dan 3 is
                }else if(vijand.getLaatstePad().getLength() < 3){
                    //dan heeft de speler verloren
                    main.verliesSpel();
                //anders
                }else{
                    //als de vijand vast staat maak hem vrij
                    if(vijand.staatVast()){
                        vijand.maakVrij();
                    }
                    //beweeg de vijand
                    vijand.move();
                }
            }
        }
    }

    /**
     * Haal de vijand op
     * @return De vijand
     */
    public Vijand getVijand(){
        return vijand;
    }
}
